Wichtig !!! | N E U E S ... | Inhalt | Hotline | Stichwortverzeichnis |
Kapitel 5-7
Der Befehlssatz: LSET - NEXT
LSET | |
Typ: | Befehl |
Syntax: | LSET <String-Variable>=<String-Ausdruck> |
Erklärung: | Der String-Ausdruck wird linksbündig in die String-Variable eingesetzt, ohne daß deren Länge verändert wird. Gegebenenfalls wird der String-Ausdruck hinten abgeschnitten. Dieser Befehl wird besonders bei Zuweisungen an Puffervariablen (siehe FIELD) benutzt. |
Beispiel: |
LSET A$="Omikron" PRINT "*";A$;"*" |
Ergebnis: |
|
siehe auch: | RSET FIELD LEFT$ |
MAC_OS | |
Typ: | Befehl |
Syntax: | MAC_OS [num.Variable[,num.Variable[,...]]] ;{<String-Konstante>|<num.Konstante>}, <String-Konstante>
[num.Ausdruck[,num.Ausdruck[,...]]] MAC_OS [Rückgabe-Variable[,Rückgabe-Variable[,...]]] ;{<Import-Library-Name>|<Import-Library-Nummer>}, <Funktions-Name> [Parameter1[,Parameter2[,...]]] |
Erklärung: | Dies ist ein Universalbefehl, mit dem Funktionen importiert werden können. Er dient hauptsächlich dazu,
Aufrufe an das MacOS zu machen, kann aber auch dazu benutzt werden, Funktionen aus C-Libraries zu importieren.
An die <Rückgabe-Variablen> kann ein Wert zurückgegeben wird. Wieviele und welcher Typ hier angegeben
werden müssen, hängt von der zu importierenden Funktion ab. Wenn die Funktion nichts zurückgibt,
können die Variablen auch ganz weggelassen werden. Ein Semikolon muß jedoch stehen bleiben. Der <Import-Library-Name> setzt sicht aus 3 Strings, P$+N$+M$ zusammen und bestimmt die Import-Library, die die gewünschte Funktion exportiert. P$ ist ein nullterminierter Pfad N$ ist ein nullterminierter Name M$ ist eine nullterminierte Member-Bezeichnung P$ und M$ können auch aus einem nullterminierten Leerstring bestehen. Statt der String-Konstanten kann an dieser Stelle auch eine numerische Konstante von 1 bis 8 stehen. Dann werden die folgenden vordefinierten Strings eingesetzt: 1: CHR$(0)+"InterfaceLib"+CHR$(0)+CHR$(0) 2: CHR$(0)+"MathLib"+CHR$(0)+CHR$(0) 3: CHR$(0)+"QuickTimeLib"+CHR$(0)+CHR$(0) 4: CHR$(0)+"SpeechLib"+CHR$(0)+CHR$(0) 5: CHR$(0)+"QuickDrawGXLib"+CHR$(0)+CHR$(0) 6: CHR$(0)+"AppleScriptLib"+CHR$(0)+CHR$(0) 7: CHR$(0)+"ObjectSupportLib"+CHR$(0)+CHR$(0) 8: CHR$(0)+"StdCLib"+CHR$(0)+CHR$(0) <Funktions-Name> ist der Name der Funktion, die aufgerufen werden soll. Dabei ist auf Groß- und Kleinschreibung zu achten. Wichtig: <Import-Library-Name> oder <Import-Library-Nummer> und <Funktions-Name> müssen Konstanten sein, da sie schon zur Compilierungszeit bekannt sein müssen. Also keine Variablen angeben, sondern Klartext, wie bei den vordefinierten Einträgen. <Parameter1>,<Parameter2>, ... sind numerische Parameter, die an die Funktion übergeben werden. Strings können nicht direkt übergeben werden. Stattdessen übergibt man einen Pointer auf den String. Dabei ist darauf zu achten, ob die Funktion einen Pascal-String oder einen C-String erwartet. Der String muß also gegebenenfalls mit einem Längenbyte versehen bzw. nullterminiert werden. |
Beispiel: |
|
Ergebnis: | |
siehe auch: |
MAT | |
Typ: | Befehl |
Syntax: | MAT <Feldvariable>{+|-|*|/}<Feldvariable> MAT <Feldvariable>=<Feldvariable>[ {+|-|*|/}<Feldvariable> ] 1: MAT <Feldvariable>=1 2: MAT <Feldvariable>=<Feldvariable> 3: MAT <Feldvariable>{+|-|*|/}<Feldvariable> 4: MAT <Feldvariable>=<Feldvariable>{+|-|*|/}<Feldvariable> |
Erklärung: | Zunächst ein paar grundsätzliche Dinge: Matrixbefehle funktionieren nur mit zweidimensionalen Fließkommafeldern. Dabei spielt es keine Rolle, ob Sie einfache oder doppelte Genauigkeit verwenden. Die Größe der Matrizen wird durch die angegebenen Indices bestimmt. Die Zählung der Elemente beginnt wie immer bei Null. Matrix!(2,2) meint also eine dreireihige quadratische Matrix. Matrix!(N,M) ist entsprechend eine (N+1,M+1)-Matrix. Wie immer bei der Verwendung von Feldern kann der Index auch weggelassen werden, was genauso behandelt wird, als hätte man den höchsten Index angegeben. Wurde das Feld Matrix! also auf (3,3) dimensioniert, dann ist Matrix!(,) eine vierreihige quadratische Matrix. Bei der Verwendung des Befehls MAT sind vier verschiedene Syntaxen zu unterscheiden: 1. Erzeugen einer Einheitsmatrix. Der quadratischen Matrix wird die Einheitsmatrix zugewiesen. 2. Die Matrixzuweisung: Es werden alle Elemente der rechten Seite der linken zugewiesen. Hinweis: Dieser Befehl funktioniert mit beliebigen Feldern, die nicht die speziellen Anforderungen von Matrizen im Sinne von Omikron Basic genügen. Es wird einfach alles von rechts nach links kopiert, bis zum angegebenen Element. Eine Typkonvertierung ist dabei natürlich nicht möglich. 3. Skalare Matrix-Operationen: Je nach Operator wird - zu jedem Element ein Wert addiert - von jedem Element ein Wert subtrahiert - jedes Element mit einem Wert multipliziert - jedes Element durch einen Wert dividiert 4. Vektorielle Matrix-Operationen: Je nach Operator werden - zwei Matrizen addiert (elementweise) - zwei Matrizen subtrahiert (elementweise) - zwei Matrizen multipliziert - zwei Matrizen dividiert (mit der Inversen multipliziert) Bei der Matrizen-Multiplikation bzw. Division ist auf eine geeignete Wahl der Matrix-Dimensionen zu achten. Es gilt: A(P,Q)=B(P,N)*C(N,Q). Bei der Division muß zusätzlich die Matrix C quadratisch sein. |
Beispiel: |
DIM Matrix!(N,N),Mat_A!(N,N),Mat_B!(N,N),Mat_C!(N,N) DIM Array(10),Feld(10) MAT Matrix!(,)=1 MAT Mat_A!(1,1)+2 MAT Mat_C!(,)=Mat_B!(,)+Mat_A!(,) MAT Matrix!(1,2)=Mat_A!(1,2) MAT Feld(5)=Array(6):'Der kleinere Index gilt |
Ergebnis: | |
siehe auch: | MAT CLEAR MAT INV |
MAT CLEAR | |
Typ: | Befehl |
Syntax: | MAT CLEAR <Feldvariable> |
Erklärung: | MAT CLEAR löscht ein beliebiges Feld bis zum angegebenen maximalen Index. Wird kein Index angegeben, so wird das gesamte Feld gelöscht. Dieser Befehl ist nicht auf Fließkommafelder beschränkt, sondern kann für beliebige Datentypen und beliebige Dimensionen benutzt werden. |
Beispiel: |
DIM Matrix!(N,N) DIM Array(10) MAT CLEAR Matrix!(,) MAT CLEAR Array(5) |
Ergebnis: |
|
siehe auch: | MAT |
MAT INV | |
Typ: | Befehl |
Syntax: | MAT <Feldvariable>= INV <Feldvariable> |
Erklärung: | Berechnet die inverse Matrix. Beide Matrizen müssen quadratisch sein. Existiert die inverse Matrix nicht (Determinate = 0), so wird eine Fehlermeldung erzeugt. |
Beispiel: |
DIM Mat_A!(N,N),Mat_B!(N,N) MAT Mat_A!(,)=1 MAT Mat_B!(,)= INV Mat_A!(,) |
Ergebnis: |
|
siehe auch: | MAT |
MAX | |
Typ: | Funktion |
Syntax: | MAX (<Ausdruck>,<Ausdruck>) |
Erklärung: | Gibt den größeren der beiden Ausdrücke als Funktionswert. Vergleiche zwischen numerischen Ausdrücken und String-Ausdrücken sind unzuläsig. |
Beispiel: |
|
Ergebnis: |
|
siehe auch: | MIN |
MEMORY | |
Typ: | Funktion |
Syntax: | MEMORY(<num.Ausdruck>) MEMORY(<Blocklänge|-1>) |
Erklärung: | Die MEMORY-Funktion reserviert einen nicht verschiebbaren Speicherblock im Application-Heap ihres Programms.
Der Aufruf mit "-1" als Parameter liefert die Länge des größten freien Blocks zurück.
Ansonsten wird die Speicheradresse zurückgegeben, ab der der verlangte Speicherblock zur Verfügung steht.
Um genügend große Mengen Speicher mit MEMORY reservieren zu können, muß der Application-Heap
ausreichend groß gewählt werden (siehe COMPILER "PRE_SIZE
...") . Steht nicht genug Speicher zur Verfügung, so erscheint die Fehlermeldung "Zu wenig Heap-Speicher
reserviert". Speicherblöcke, die mit MEMORY angelegt wurden, können mit FRE() wieder freigegeben
werden. Hinweis: Sie sollten immer etwas Speicher frei lassen (mindestens 64K), da diverse Omikron Basic Befehle bzw. MacOS-Funktionen Speicher im Application-Heap benötigen. |
Beispiel: |
IF Free_Mem>40000 THEN Bild_Puffer=MEMORY(32000) ELSE PRINT "Zu wenig Speicher frei!" ENDIF |
Ergebnis: |
|
siehe auch: | FRE |
MEMORY_BLOCK | |
Typ: | Befehl |
Syntax: | MEMORY_BLOCK <Zwei Ziffern>, <num.Ausdruck>, <num.Variable> MEMORY_BLOCK <Zwei Ziffern>, <Größe>, <Adressrückgabevariable> |
Erklärung: | Der MEMORY_BLOCK-Befehl erzeugt schon bei der Eingabe in Ihr Programm einen Speicherblock der angegebenen Größe,
der in Ihrem Programm fortan erhalten bleibt. Dieser reservierte Speicherblock ist fortan Bestandteil Ihres Programms
und wird dementsprechend auch vom Editor mit abgespeichert bzw. geladen. Dieser Speicherblock wird identifiziert
durch die beiden Ziffern direkt hinter dem MEMORY_BLOCK Befehl. Wird ein weiterer MEMORY_BLOCK mit gleichen zwei
Ziffern erzeugt, der eine geringere Größe als der erste hat, so wird der erste dabei zerstört.
Da der Speicherblock also durch die zwei Ziffern gekennzeichnet ist, sind maximal 100 Speicherblöcke (00-99) in einem Programm möglich. Achtung: Es müssen immmer GENAU zwei Ziffern sein (z.B. 03, 00 oder 23). Die Größe des Blocks muß eine gerade Zahl sein und die Länge darf 32 MB nicht übersteigen. Der MEMORY_BLOCK kann vom Editor aus mit dem Menüpunkt 'MEMORY_BLOCK zuladen' im Bearbeiten-Menü mit Daten gefüllt werden. Die Daten können z.B. ein Bild enthalten, das Sie in Ihrem Programm verwenden wollen oder aber auch ein kurzes Maschinenspracheprogramm, das eine spezielle Aufgabe besonders schnell erledigt. Erst wenn Ihr Programm nach erfolgter Compilierung über den MEMORY_BLOCK-Befehl läuft, wird die Adresse des Speicherblocks in die Rückgabevariable geschrieben. Da vor dem eigentlichen Programmstart die absolute Adresse des MEMORY_BLOCK's also nicht bekannt ist, sollten Maschinenspracheprogramme in durch MEMORY_BLOCK angelegten Speicherbereichen keine absoluten Adressen verwenden! Achtung: In einen MEMORY_BLOCK können sie zur Laufzeit Ihres Programms nicht schreiben, da er sich im Code-Fragment befindet und dadurch schreibgeschützt ist. Ein MEMORY_BLOCK kann nur vom Editor aus mit Daten gefüllt werden. |
Beispiel: |
MEMORY_BLOCK 00,32000,Titelbild BITBLT Titelbild,0,0,W_PIXEL,H_PIXEL WAIT 3 |
Ergebnis: |
|
siehe auch: | MEMORY MEMORY_MOVE |
MEMORY_MOVE[B] | |
Typ: | Befehl |
Syntax: | MEMORY_MOVE[B] <Quelladresse>, <Länge>TO <Zieladresse> |
Erklärung: | Das Kopieren von Speicherbereichen kann man am besten mit dem MEMORY_MOVE Befehl bewerkstelligen. Das Speicherstück,
das bei <Quelladresse> beginnt und <Länge> lang ist, wird an die <Zieladresse> kopiert.
MEMORY_MOVEB hat die gleiche Funktion wie MEMORY_MOVE und wird nur aus Kompatibilitätsgründen unterstützt. Hinweis: Die Kopiergeschwindigkeit ist am größten, wenn Quell- und Zieladresse auf einer 8-Byte-Grenze liegen. |
Beispiel: |
MEMORY_MOVE Puffer+15000,5000 TO Puffer |
Ergebnis: |
|
siehe auch: | MEMORY MEMORY_BLOCK |
MERGE | |
Erklärung: | hat in Omikron Basic 6 keine Bedeutung und wird vom Compiler ignoriert. Bitte nicht verwenden. |
MID$ | |
Typ: | Befehl |
Syntax: | MID$(<String-Variable>,<num.Ausdruck>,<num. Ausdruck>)= <String-Ausdruck>
MID$(<String-Variable>,<Stelle>,<Anzahl>)=<String-Ausdruck> |
Erklärung: | Weist der String-Variablen ab der angegebenen Stelle den String-Ausdruck zu und zwar maximal die angegebene Anzahl Zeichen. Dabei wird die Länge der String-Variablen nicht verändert. |
Beispiel: |
MID$(Programm$,8,1)="." PRINT Programm$ |
Ergebnis: |
|
siehe auch: | MID$ als Funktion RIGHT$ LEFT$ |
MID$ | |
Typ: | Funktion |
Syntax: | MID$(<String-Ausdruck,<num.Ausdruck>[,<num.Ausdruck>]) MID$(<String-Ausdruck>,<Stelle>[,<Länge>]) |
Erklärung: | Ergibt einen Teilstring des String-Ausdrucks beginnend ab der gegebenen Stelle mit der gegebenen Länge. Ist Länge nicht gegeben oder größer als der verbleibende Teil des String-Ausdrucks, so endet der Teilstring am Ende des String-Ausdrucks. |
Beispiel: |
PRINT MID$(A$,6,7) PRINT MID$("abcdefg",4) |
Ergebnis: |
defg |
siehe auch: | MID$ als Befehl LEFT$ RIGHT$ |
MIN | |
Typ: | Funktion |
Syntax: | MIN (<Ausdruck>,<Ausdruck>) |
Erklärung: | Gibt den kleineren der beiden Ausdrüe als Funktionswert. Vergleiche zwischen numerischen und String-Ausdrücken sind unzulässig. |
Beispiel: |
|
Ergebnis: |
|
siehe auch: | MAX |
MIRROR$ | |
Typ: | Funktion |
Syntax: | MIRROR$(<String-Ausdruck>) |
Erklärung: | Spiegelt den gegebenen String-Ausdruck. Das erste Zeichen wird mit dem letzten vertauscht, das zweite mit dem vorletzten etc. |
Beispiel: |
|
Ergebnis: |
|
siehe auch: |
MKD$ | |
Typ: | Funktion |
Syntax: | MKD$(<num.Ausdruck>) |
Erklärung: | Wandelt den numerischen Ausdruck in eine Double-Float-Zahl um, und diese in einen 8 Zeichen langen String.
MKD$ ist die Umkehrfunktion zu CVD. |
Beispiel: |
FOR I=1 TO 8 PRINT HEX$(ASC(MID$(Zahl$,I,1))); NEXT I |
Ergebnis: |
|
siehe auch: | CVD MKI$ MKIL$ MKS$ |
MKDIR | |
Typ: | Befehl |
Syntax: | MKDIR <String-Ausdruck> |
Erklärung: | Legt einen neuen Ordner an. In <String-Ausdruck> muß ein FileSpecificationRecord übergeben werden. |
Beispiel: |
|
Ergebnis: |
|
siehe auch: | RMDIR CHDIR |
MKI$ | |
Typ: | Funktion |
Syntax: | MKI$(<num.Ausdruck>) |
Erklärung: | Wandelt den numerischen Ausdruck in eine Short-Integert-Zahl um, und diese in einen 2 Zeichen langen String.
MKI$ ist die Umkehrfunktion zu CVI. |
Beispiel: |
|
Ergebnis: |
|
siehe auch: | CVI MKIL$ MKS$ MKD$ |
MKIL$ | |
Typ: | Funktion |
Syntax: | MKIL$(<num.Ausdruck>) |
Erklärung: | Wandelt den numerischen Ausdruck in eine Long-Integer-Zahl um, und diese in einen 4 Zeichen langen String.
MKIL$ ist die Umkehrfunktion zu CVIL. |
Beispiel: |
|
Ergebnis: |
|
siehe auch: | CVIL MKI$ MKS$ MKD$ |
MKS$ | |
Typ: | Funktion |
Syntax: | MKS$(<num.Ausdruck>) |
Erklärung: | Wandelt den numerischen Ausdruck in eine Single-Float-Zahl um, und diese in einen 4 Zeichen langen String.
MKS$ ist die Umkehrfunktion zu CVS. |
Beispiel: |
FOR I=1 TO 4 PRINT HEX$(ASC(MID$(Zahl$,I,1))); NEXT I |
Ergebnis: |
|
siehe auch: | CVS MKD$ MKI$ MKIL$ |
MOD | |
Typ: | Operator |
Syntax: | <num.Ausdruck>MOD<num.Ausdruck> |
Erklärung: | Ermittelt den Rest einer Division des ersten numerischen Ausdrucks durch den zweiten. Der Teiler muß natürlich ungleich 0 sein. Das Vorzeichen entspricht dem des ersten Ausdrucks. |
Beispiel: |
|
Ergebnis: |
|
siehe auch: | Mathematische Operatoren |
MODE | |
Typ: | Befehl |
Syntax: | MODE <String-Ausdruck> MODE <Länderkennung> |
Erklärung: |
Stellt den länderspezifischen Modus ein. "D" für Deutschland, Die Ländereinstellung beeinflußt die Umwandlung von Groß- in Kleinbuchstaben und umgekehrt mit LOWER$ und UPPER$. |
Beispiel: |
PRINT UPPER$(äöü) MODE "USA" PRINT LOWER$(ÄÖÜ) |
Ergebnis: |
ÄÖÜ |
siehe auch: |
MODE= | |
Typ: | Befehl |
Syntax: | MODE= <num. Ausdruck> MODE= <Zeichenmodus> |
Erklärung: | Stellt den Zeichenmodus für alle Graphikbefehle ein. Mögliche Einstellungen sind: 1: deckend 2: transparent 3: XOR 4: revers transparent |
Beispiel: | |
Ergebnis: | |
siehe auch: |
MODE LPRINT | |
Erklärung: | hat in Omikron Basic 6 keine Bedeutung und wird vom Compiler ignoriert. Bitte nicht verwenden. |
MOUSEBUT | |
Typ: | Funktion |
Syntax: | MOUSEBUT |
Erklärung: | Gibt den Zustand der Maustaste an und berücksichtigt dabei auch den Zustand der Modifier-Keys. Dementsprechend
liefert die Funktion Werte zwischen 0 und 32 zurück wie z.B.: MOUSEBUT = 1 wenn nur Maustaste gedrückt MOUSEBUT = 2 wenn Maustaste und Apfeltaste gedrückt MOUSEBUT = 3 wenn Maustaste und Shifttaste gedrückt usw. Der Funktionswert von MOUSEBUT ergibt sich also aus dem Wert der Modifier-Keys (siehe Beschreibung bei INKEY$) + 1 für die gedrückte Maustaste. |
Beispiel: |
REPEAT PRINT @(2,0);MOUSEBUT;SPACE$(5); UNTIL LEN(INKEY$) |
Ergebnis: |
|
siehe auch: | MOUSEX MOUSEY |
MOUSEOFF | |
Typ: | Befehl |
Syntax: | MOUSEOFF |
Erklärung: | Schaltet die Maus ab (Der Mauszeiger ist nicht mehr sichtbar). |
Beispiel: | |
Ergebnis: | |
siehe auch: | MOUSEON |
MOUSEON | |
Typ: | Befehl |
Syntax: | MOUSEON |
Erklärung: | Schaltet die Maus an (Der Mauszeiger ist wieder sichtbar). |
Beispiel: | |
Ergebnis: | |
siehe auch: | MOUSEOFF |
MOUSEX | |
Typ: | Funktion |
Syntax: | MOUSEX |
Erklärung: | Ergibt die X-Koordinate der Mausposition. Dabei ist es unerheblich, ob die Maus gerade angezeigt wird oder nicht. |
Beispiel: |
REPEAT PRINT @(2,0);MOUSEX;SPACE$(5); PRINT @(3,0);MOUSEY;SPACE$(5); UNTIL LEN(INKEY$) |
Ergebnis: |
|
siehe auch: | MOUSEY MOUSEBUT |
MOUSEY | |
Typ: | Funktion |
Syntax: | MOUSEY |
Erklärung: | Ergibt die Y-Koordinate der Mausposition. Dabei ist es unerheblich, ob die Maus gerade angezeigt wird oder nicht. |
Beispiel: |
REPEAT PRINT @(2,0);MOUSEX;SPACE$(5); PRINT @(3,0);MOUSEY;SPACE$(5); UNTIL LEN(INKEY$) |
Ergebnis: |
|
siehe auch: | MOUSEX MOUSEBUT |
NAME ... AS | |
Typ: | Befehl |
Syntax: | NAME <String-Ausdruck>AS <String-Ausdruck> NAME <Dateiname/alt>AS <Dateiname/neu> |
Erklärung: | <Dateiname/alt> muß einen FileSpecificationRecord enthalten. <Dateiname/neu> darf nur den neuen Namen enthalten. Wenn eine Directory umbenannt werden soll, müssen die Namen mit einem Doppelpunkt abgeschlossen werden. |
Beispiel: |
NAME FN Get_Fsspec$(0,0,"AlterOrdner:") AS "NeuerOrner:" |
Ergebnis: |
|
siehe auch: | COPY BACKUP |
NAND | |
Typ: | Operator |
Syntax: | <num.Ausdruck>NAND<num.Ausdruck> |
Erklärung: | Verknüpft die beiden numerischen Ausdrücke logisch "nicht-und (NOT AND)". |
Beispiel: |
|
Ergebnis: |
|
siehe auch: | AND OR NOR XOR IMP EQV NOT |
NDC | |
Erklärung: | hat in Omikron Basic 6 keine Bedeutung und wird vom Compiler ignoriert. Bitte nicht verwenden. |
NEW | |
Erklärung: | hat in Omikron Basic 6 keine Bedeutung und wird vom Compiler ignoriert. Bitte nicht verwenden. |
NEXT | |
Typ: | Befehl |
Syntax: | NEXT [<num.Variable>] NEXT [<Schleifenvariable>] |
Erklärung: | Beendet eine FOR ... NEXT Schleife. Ist keine Schleifenvariable angegeben, so bezieht sich das NEXT immer auf das letzte FOR. |
Beispiel: | |
Ergebnis: | |
siehe auch: | FOR UNTIL WEND |